package com.richpay.basejava.base15;

/**
 * 异常处理:
 * try{
 * //有可能发生异常的代码
 * }catch(Exception1 e){
 * //一旦发生了异常则进入相应的catch块进行处理
 * }finally{
 * //不管是否发生异常都会执行的语句块放在finally语句中
 * //将释放资源的工作代码放在这里执行
 * }
 * <p>
 * 总结:
 * try语句形式:
 * A:try{}catch(Exception e){}
 * B:try{}catch(Exception e){}finally{}
 * C:try{}finally{}
 * <p>
 * 上面的处理方式叫做就地处理。
 */
public class FinallyDemo {
    public static void main(String[] args) {
        int num1 = 5;
        int num2 = 0;
        int result = 0;

        try {
            //result = num1 / num2;
            // System.out.println("result=" + result);
            int[] array = new int[2];
            array[2] = 100;
            // 一旦在try语句中出现了异常，
            // 则自动匹配抛出的异常类型的对象和catch块中的异常类型进行匹配，
            // 一旦匹配成功就会进入指定的catch语句块进行异常处理，处理完毕后，
            // 程序继续向下运行.

            //一旦前面的语句发生了异常，则这句代码将永远没有机会执行了。
            System.out.println("try语句结束");
        }
        catch (ArithmeticException e) {
            e.printStackTrace();//打印异常发生的轨迹。
            System.out.println("ArithmeticException=" + e.getMessage());
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();//打印异常发生的轨迹。
            System.out.println("ArrayIndexOutOfBoundsException=" + e.getMessage()
            );
        } catch (Exception e) {
            e.printStackTrace();//打印异常发生的轨迹。
            System.out.println("Exception" + e.getMessage());
        }

        finally {
            System.out.println("====finally===");
            System.out.println("关闭流操作");
        }
        //一旦发生了异常，自己又没有进行处理，
        // 则只会执行finally语句块中的代码，外面的代码没有机会执行.
        //如果在catch中进行了处理则会继续执行下面的代码
        System.out.println("result=" + result);
    }
}
